home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 4 / PC World Interactive 4.iso / online / appbar.EXE / cppsrc / Optdlg.cpp < prev    next >
C/C++ Source or Header  |  1996-08-31  |  6KB  |  218 lines

  1. // *********************************************************
  2. // AppBar -- Advanced Menu bar for Windows 95/NT
  3. // All code Copyright (C) 1995, 1996 by Mike Perham
  4. // mperham@cs.cornell.edu
  5. // 
  6. // This code MAY NOT be used for any other program without
  7. // my permission and is forbidden in any shareware/commercial
  8. // program.  This code is provided for educational use only
  9. // and there are no guarantees or promises implied.  Blah blah
  10. // *********************************************************
  11.  
  12.  
  13. // OptDlg.cpp : implementation file
  14. //
  15.  
  16. #include "appbar.h"
  17. #include "globals.h"
  18.  
  19. #ifdef _DEBUG
  20. #define new DEBUG_NEW
  21. #undef THIS_FILE
  22. static char THIS_FILE[] = __FILE__;
  23. #endif
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // OptDlg dialog
  27.  
  28. OptDlg::OptDlg(CWnd* pParent /*=NULL*/)
  29.     : CDialog(OptDlg::IDD, pParent)
  30. {
  31.     //{{AFX_DATA_INIT(OptDlg)
  32.         // NOTE: the ClassWizard will add member initialization here
  33.     //}}AFX_DATA_INIT
  34. }
  35.  
  36. BEGIN_MESSAGE_MAP(OptDlg, CDialog)
  37.     //{{AFX_MSG_MAP(OptDlg)
  38.     ON_BN_CLICKED(IDB_TESTWAV, OnTestWav)
  39.     ON_BN_CLICKED(IDB_FINDWAV, OnFind)
  40.     ON_BN_CLICKED(IDC_AUTOHIDE, OnAutohide)
  41.     ON_BN_CLICKED(IDC_BOTTOM, OnBottom)
  42.     ON_BN_CLICKED(IDC_CHIME, OnChime)
  43.     ON_BN_CLICKED(IDC_DATE, OnDate)
  44.     ON_BN_CLICKED(IDC_MEMORY, OnMemory)
  45.     ON_BN_CLICKED(IDC_STAYONTOP, OnStayontop)
  46.     ON_BN_CLICKED(IDC_TIME, OnTime)
  47.     ON_BN_CLICKED(IDC_USER, OnUser)
  48.     //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50.  
  51. /////////////////////////////////////////////////////////////////////////////
  52. // OptDlg message handlers
  53.  
  54. BOOL OptDlg::OnInitDialog() 
  55. {
  56.     CDialog::OnInitDialog();
  57.     GetDlgItem(IDC_WAVNAME)->SendMessage(WM_SETTEXT, 0, (LPARAM)uv.wavfile);
  58.     CheckDlgButton(IDC_CHIME, uv.chime);
  59.     CheckDlgButton(IDC_DATE, uv.date);
  60.     CheckDlgButton(IDC_MEMORY, uv.memory);
  61.     CheckDlgButton(IDC_STAYONTOP, uv.stayontop);
  62.     CheckDlgButton(IDC_BOTTOM, uv.bottom);
  63.     CheckDlgButton(IDC_AUTOHIDE, uv.autohide);
  64.     CheckDlgButton(IDC_TIME, uv.time);
  65.     CheckDlgButton(IDC_USER, uv.user);
  66.     return TRUE;  
  67. }
  68.  
  69. void OptDlg::OnFind()
  70. {
  71.     DoBrowse(1, this);
  72. }
  73.  
  74. void OptDlg::OnTestWav() 
  75. {
  76.     char buffer[80];
  77.  
  78.     GetDlgItem(IDC_WAVNAME)->SendMessage(WM_GETTEXT, sizeof(buffer), (LPARAM)buffer);
  79.     if (!strcmp(buffer, "")) {
  80.         ab_message(ERROR_ENTER_WAVNAME, ab.abwin->GetSafeHwnd());
  81.         return;
  82.     }
  83.     if (!PlaySound(buffer, NULL, SND_ASYNC | SND_FILENAME))
  84.         ab_message(ERROR_PLAYING_WAV, ab.abwin->GetSafeHwnd());
  85. }    
  86.  
  87. void OptDlg::OnOK() 
  88. {
  89.     char buffer[80];
  90.  
  91.     GetDlgItem(IDC_WAVNAME)->SendMessage(WM_GETTEXT, sizeof(buffer), (LPARAM)buffer);
  92.     if (!strcmp(buffer, "") && uv.chime) {
  93.         ab_message(ERROR_ENTER_WAVNAME, ab.abwin->GetSafeHwnd());
  94.         return;
  95.     }
  96.     strcpy(uv.wavfile, buffer);
  97.     EndDialog(TRUE);
  98. }
  99.  
  100.  
  101. void OptDlg::OnAutohide() 
  102. {
  103.     if (sv.newshell) {
  104.         uv.autohide = !uv.autohide;
  105.         CheckDlgButton(IDC_AUTOHIDE, uv.autohide);
  106.         // set or unset the autohide bar for this edge
  107.         abd.cbSize = sizeof(APPBARDATA);
  108.         abd.hWnd = ab.abwin->m_hWnd;
  109.         abd.uEdge = (uv.bottom ? ABE_BOTTOM : ABE_TOP);
  110.         abd.lParam = (uv.autohide ? TRUE : FALSE);
  111.         if (!SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd)) {
  112.             uv.autohide = FALSE;
  113.             CheckDlgButton(IDC_AUTOHIDE, uv.autohide);
  114.             ab_message(ERROR_AUTOHIDING, ab.abwin->GetSafeHwnd());
  115.             return;
  116.         }
  117.         // update the position of the autohide bar
  118.         if (uv.autohide) {
  119.             abd.rc.top = abd.rc.left = abd.rc.right = abd.rc.bottom = 0;
  120.             SHAppBarMessage(ABM_SETPOS, &abd);
  121.           } else {
  122.             abd.rc.top = abd.rc.left = 0;
  123.             abd.rc.right = sv.width;
  124.             abd.rc.bottom = sv.height;
  125.             SHAppBarMessage(ABM_QUERYPOS, &abd);
  126.             abd.rc.top = (uv.bottom ? abd.rc.bottom - AB_HEIGHT : abd.rc.top);
  127.             ab.abwin->MoveWindow(abd.rc.top, 0, AB_WIDTH, AB_HEIGHT, TRUE);
  128.             abd.rc.bottom = abd.rc.top + AB_HEIGHT;
  129.             abd.rc.right = AB_WIDTH;
  130.             SHAppBarMessage(ABM_SETPOS, &abd);
  131.         }
  132.         ab.abwin->HideAppBar(uv.autohide);
  133.     } else {
  134.         ab_message(ERROR_AUTOHIDE_NT, ab.abwin->GetSafeHwnd());
  135.         uv.autohide = TRUE;
  136.         CheckDlgButton(IDC_AUTOHIDE, uv.autohide);
  137.     }
  138. }
  139.  
  140. void OptDlg::OnBottom() 
  141. {
  142.     uv.bottom = !uv.bottom;
  143.     CheckDlgButton(IDC_BOTTOM, uv.bottom);
  144.     ab.abwin->MoveWindow(0, (uv.bottom ? sv.height - AB_HEIGHT : 0),
  145.                         AB_WIDTH, AB_HEIGHT, TRUE);
  146.     ab.abwin->ModifyTime();
  147.     if (sv.newshell) {
  148.         // we are changing our onscreen position so
  149.         // we need to reinitialize our appbar system info
  150.         abd.cbSize = sizeof(APPBARDATA);
  151.         abd.hWnd = ab.abwin->m_hWnd;
  152.         abd.uEdge = (uv.bottom ? ABE_BOTTOM : ABE_TOP);
  153.         if (uv.autohide) {
  154.             SHAppBarMessage(ABM_REMOVE, &abd);
  155.             SHAppBarMessage(ABM_NEW, &abd);
  156.             abd.lParam = TRUE;
  157.             if (!SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd)) {
  158.                 // go back to previous edge...
  159.                 uv.bottom = !uv.bottom;
  160.                 ab.abwin->SetWindowPos(NULL, 0, (uv.bottom ? sv.height - AB_HEIGHT : 0),
  161.                                         0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
  162.                 abd.uEdge = (uv.bottom ? ABE_BOTTOM : ABE_TOP);
  163.                 SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd);
  164.                 CheckDlgButton(IDC_BOTTOM, uv.bottom);
  165.                 ab_message(ERROR_AUTOHIDING, ab.abwin->GetSafeHwnd());
  166.                 return;
  167.             }
  168.         } else {
  169.             abd.rc.top = abd.rc.left = abd.rc.right = abd.rc.bottom = 0;
  170.             abd.rc.right = sv.width;
  171.             abd.rc.bottom = sv.height;
  172.             SHAppBarMessage(ABM_QUERYPOS, &abd);
  173.             abd.rc.left = 0;
  174.             abd.rc.top = (uv.bottom ? abd.rc.bottom - AB_HEIGHT : abd.rc.top);
  175.             abd.rc.bottom = abd.rc.top + AB_HEIGHT;
  176.             abd.rc.right = AB_WIDTH;
  177.             SHAppBarMessage(ABM_SETPOS, &abd);
  178.         }
  179.     } else
  180.         ab.abwin->HideAppBar(TRUE);
  181. }
  182.  
  183. void OptDlg::OnChime() 
  184. {
  185.     uv.chime = !uv.chime;
  186. }
  187.  
  188. void OptDlg::OnDate() 
  189. {
  190.     uv.date = !uv.date;
  191.     ab.abwin->ModifyTime();
  192. }
  193.  
  194. void OptDlg::OnMemory() 
  195. {
  196.     uv.memory = !uv.memory;
  197.     ab.abwin->ModifyTime();
  198. }
  199.  
  200. void OptDlg::OnStayontop() 
  201. {
  202.     uv.stayontop = !uv.stayontop;
  203.     ab.abwin->SetWindowPos((uv.stayontop ? &wndTopMost : &wndNoTopMost),
  204.                        0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
  205. }
  206.  
  207. void OptDlg::OnTime() 
  208. {
  209.     uv.time = !uv.time;    
  210.     ab.abwin->ModifyTime();
  211. }
  212.  
  213. void OptDlg::OnUser() 
  214. {
  215.     uv.user = !uv.user;
  216.     ab.abwin->ModifyTime();
  217. }
  218.